2
תגובות
PHP Enumerations
פתח
Elad65
,
איך אפשר לדמות שימוש ב-Enum ב-PHP?
מה השיטה הכי טובה?
מה השיטה הכי טובה?
2 תשובות
א. על ידי מחלקות
- לא יעיל כל כך מבחינת משאבים
interface IEnumConstraint {}
class Value1 implements IEnumConstraint {}
class Value2 implements IEnumConstraint {}
class Constrained
{
public function(IEnumConstraint $value) {}
}
class Value1 implements IEnumConstraint {}
class Value2 implements IEnumConstraint {}
class Constrained
{
public function(IEnumConstraint $value) {}
}
ב. על ידי קונסטנטות של מחלקות
- מעבד את ההגבלה של רק ערכים מסוימים
class Constrained
{
const VALUE1 = 23554245;
const VALUE2 = 456345289;
public function($value) {}
}
{
const VALUE1 = 23554245;
const VALUE2 = 456345289;
public function($value) {}
}
ג. על ידי הרחבה חיצונית שנקראת spl enum
- לא פרוטבילי ויעבוד רק על שרתים שבהם מותקנת ההרחבה
http://php.net/manual/en/class.splenum.php
class IEnumFruit extends SplEnum
{
const __default = 1; // default value
const APPLE = 1;
const ORANGE = 2;
}
class Constrained
{
function eat(Fruit $aFruit)
{
if (Fruit::APPLE == $aFruit)
...
}
}
{
const __default = 1; // default value
const APPLE = 1;
const ORANGE = 2;
}
class Constrained
{
function eat(Fruit $aFruit)
{
if (Fruit::APPLE == $aFruit)
...
}
}
יש המון שיטות
השיטה שלי היא:
define('ENUM_HEY','ENUM_HEY');
define('ENUM_BYE','ENUM_BYE');
define('ENUM_BYE','ENUM_BYE');
בעצם אני מגדיר קבוע שהשם שלו מורכב משם ה-ENUM ושם המפתח, והערך שלו שווה לשם הקבוע.
לרוב אני עושה פונקציה שעושה את זה במקומי.
function enum($name, array $keys) {
if (!is_string($name)) return false;
foreach ($keys as $key => $value) {
$value = $name.'_'.$value;
define($value,$value,true);
}
}
if (!is_string($name)) return false;
foreach ($keys as $key => $value) {
$value = $name.'_'.$value;
define($value,$value,true);
}
}
enum('enum',['hey','bye'])